
[2020] 정보 처리 기사 실기 5-서버 프로그램 구현
2020-07-16 06:31 시에 저장한 글입니다.
정보처리기사 공부 후 정리 자료입니다. 정확하지 않을 수 있으니 꼭 책을 참고해서 공부하세요 2020 정보 처리 기사 서버 프로그램 구현 요약 입니다. 정처기 공부를 할 때 활용하세요.
1. 개발 환경 구축 - 하드웨어 환경
- 개발 환경 구축 : 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것
- 하드웨어 환경(클라이언트 , 서버)
- 클라이언트 : 사용자와의 인터페이스 역할
- 서버 : 클라이언트와 통신하여 서비스를 제공
- 서버의 분류
웹 서버: 클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적 파일들을 제공웹 애플리케이션서버(WAS): 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버데이터베이스 서버(DB): 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버파일 서버: 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버
2. 개발 환경 구축 - 소프트웨어 환경
- 시스템 소프트웨어 : 운영체제(OS), 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS 등
- 개발 소프트웨어
요구사항 관리 도구: 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어설계 / 모델링도구: UML(통합 모델링 언어)을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어구현 도구: 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어빌드 도구: 구현 도구를 통해 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어테스트 도구: 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어형상 관리 도구: 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어
3. 모듈(Module)
- 모듈화를 통해 분리된 시스템의 각 기능들(= 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미)
모듈화(결합도의 최소화, 응집도의 최대화 추구): 소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 분해하는 것모듈의 기능적 독립성: 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미하는 것, 모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호작용을 배제함으로써 이루어짐-
모듈의 독립성(결약응강)- 결합도(Coupling)와 응집도(Cohesion)에 의해 측정, 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않으며, 오류가 발생해도 쉽게 발견하고 해결 가능
- 높은 독립성 : 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게
4. 결합도(Coupling)
결합도: 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계- 결합도 약한 순서(결합도가 약할수록 품질이 높음)
(자스제외공내) 자료 결합도(Data Coupling): 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도, 어떤 모듈이 다른 모듈을 호출하면서 매개 변수나 인수로 데이터를 넘겨주고, 호출 받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식스탬프(검인) 결합도(Stamp Coupling): 모듈 간의 인터페이스로 배열이나 레코드등의 자료 구조가 전달될 때의 결합도제어 결합도(Control Coupling): 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소(Function Code,Switch, Tag, Flag)를 전달하는 결합도외부 결합도(External Coupling): 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도공통(공유) 결합도(Common Coupling): 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도내용 결합도(Content Coupling): 한 모듈이 다른 모듈의 내부 기능 및 그내부 자료를 직접 참조하거나 수정할 때의 결합도
5. 응집도(Cohesion)
응집도: 정보 은닉 개념을 확장한 것으로, 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 모듈이 독립적인 기능으로 정의되어 있는 정도- 응집도 강한 순서(응집도가 강할수록 품질이 높음)
(기순교절시논우) 기능적 응집도(Functional Cohesion): 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도순차적 응집도(Sequential Cohesion): 모듈 내 하나의 활동으로부터 나온 출력데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도교환(통신)적 응집도(Communication Cohesion): 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도절차적 응집도(Procedural Cohesion): 모듈이 다수의 관련 기능을 가질 때 모듈안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도시간적 응집도(Temporal Cohesion): 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도논리적 응집도(Logical Cohesion): 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도우연적 응집도(Coincidental Cohesion): 모듈 내부의 각 구성 요소들이 서로 관련없는 요소로만 구성된 경우의 응집도
6. 팬인(Fan-In) / 팬아웃(Fan-Out)
팬인: 어떤 모듈을 제어(호출)하는 모듈의 수팬아웃: 어떤 모듈에 의해 제어(호출)되는 모듈의 수- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있으나, 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
7. 공통 모듈
공통 모듈: 여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미(자주 사용되는 계산식, 매번 필요한 사용자 인증 등)- 준수사항
정확성(Correctness): 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성명확성(Clarity): 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성완전성(Completeness)시스템 구현을 위해 필요한 모든 것을 기술일관성(Consistency): 공통 기능들 간 상호 충돌이 발생하지 않도록 작성추적성(Traceability): 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성
8. 재사용(Reuse)
- 비용과 개발 시간을 절약하기 위해 이미 개발된 기능들을 파악하고 재구성하여 새로운 시스템 또는 기능 개발에 사용하기 적합하도록 최적화 시키는 작업
- 재사용 규모에 따른 분류
함수와 객체: 클래스나 메소드 단위의 소스 코드를 재사용컴포넌트: 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용애플리케이션: 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용
9. DBMS 접속(Connection)
- 사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근하는 것 ,응용 시스템은 사용자로부터 매개 변수를 전달받아 SQL을 실행하고 DBMS로부터 전달받은 결과를 사용자에게 전달하는 매개체 역할을 수행, 인터넷을 통해 구동되는 웹 응용 프로그램은 웹 응용 시스템을 통해 DBMS에 접근
-
DBMS 접속 기술 : DBMS에 접근하기 위해 사용하는 API 또는 API의 사용을 편리하게 도와주는 프레임워크 등을 의미
JDBC(Java DataBase Connectivity): Java 언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 APIODBC(Open DataBase Connectivity): 데이터베이스에 접근하기 위한 표준 개방형 API, 개발 언어에 관계없이 사용 가능MyBatis: JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크, SQL을 거의 그대로 사용할 수 있어 SQL 친화적인 국내 환경에 적합하여 많이 사용`
-
프레임워크(Framework): 특정 기능을 수행하기 위해 필요한 클래스나 인터페이스 등을 모아둔 집합체동적 SQL(Dynamic SQL): 다양한 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리 방식 사용자로부터 SQL문의 일부 또는 전부를 입력받아 실행 가능, 정적 SQL에 비해 속도가 느리지만, 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발이 가능정적 SQL: SQL 코드를 변수에 담지 않고 코드 사이에 직접 기술한 SQL문
10. 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것
- 웹 애플리케이션 서버에 구현된 서버 프로그램은 웹 서버로부터 받은 요청을 처리하여 결과를 반환하는 역할 ( Java, JavaScript, Python, PHP, Ruby 등 )
- 서버 개발 프레임워크
spring: JAVA 기반 프레임워크, 전자정부 표준 프레임워크의 기반 기술Node.js: JavaScript 기반 프레임워크로, 비동기 입·출력 처리와 이벤트 위주의 높은처리 성능을 갖고 있어 실시간으로 입·출력이 빈번한 애플리케이션에 적합Django: Python 기반 프레임워크, 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원Codeigniter: PHP를 기반 프레임워크, 인터페이스가 간편하며 서버 자원을 적게 사용Ruby on Rails: Ruby를 기반 프레임워크, 테스트를 위한 웹 서버를 지원하며 데이터베이스작업을 단순화, 자동화시켜 개발 코드의 길이가 짧아 신속한 개발이 가능- 프레임워크의 특징
(모재확제) 모듈화(Modularity): 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로서 소프트웨어의 품질을 향상재사용성(Reusability): 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상확장성(Extensibility): 다형성(Polymorphism)을 통한인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능제어의 역흐름(Inversion of Control): 개발자가 관리하고 통제해야 하는 객체들의제어 권한을 프레임워크에 넘김으로써 생산성을 향상
11. 서버 개발 과정
- 서버 개발은 DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정을 통해 이루어짐
-
DTO(Data TransferObject)/VO(ValueObject) 구현: 데이터 교환을 위해 사용할 객체를 만드는 과정- 변수 및 객체를 송·수신할 데이터의 자료형(Data Type)에 알맞게 생성
- 알고리즘 등의 로직은 구현하지 않고, 변수와 데이터를 저장하고 반환하는 메소드만 구현
-
SQL 구현: 데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정- SQL문은 소스 코드 내에 직접 입력하거나, 별도의 XML 파일로 저장하여 관리
- XML 파일로 SQL문을 관리하는 경우 중복되는 SQL문을 최소화할 수 있고, 유지보수가 간편
DAO(Data AccessObject) 구현: 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정Service 구현: 사용자의 요청에 응답하기 위한 로직을 구현하는 과정Controller 구현: 사용자의 요청에 적절한 서비스를 호출하여,그 결과를 사용자에게 반환하는 코드를 구현하는 과정
12. 배치 프로그램(Batch Program)
배치 프로그램: 사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미-
배치 프로그램의 유형 :
(정이온)정기 배치: 정해진 시점(주로 야간)에 정기적으로 실행이벤트성 배치: 사전에 정의해 둔 조건 충족 시 자동으로 실행온디맨드 배치: 사용자의 명시적 요구가 있을 때마다 실행
- 배치 스케줄러(Batch Scheduler) : 일괄 처리(Batch Processing)작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
스프링 배치(Spring Batch): Spring Source 사와 Accenture 사가 2007년 공동 개발한 오픈소스 프레임워크. 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 기능을 제공 ( 주요 구성 요소 : Job, Job Launcher, Step, Job Repository )Quartz: 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리 ( 주요 구성 요소 : Scheduler, Job, JobDetail, Trigger)Cron: 리눅스의 스케줄러 도구로 crontab 명령어를 통해 작업 예약 가능
